]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
util: Add wiggle helper
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Thu, 17 Oct 2019 10:26:04 +0000 (12:26 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Fri, 18 Oct 2019 11:25:45 +0000 (11:25 +0000)
Add Util.wiggle(), which accepts the wiggle offset, duration,
and number of times, as parameters.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/768

js/misc/util.js

index db3742eb3dd543668f630f8b5d1b9d60ef734df6..541f1876bdcc8c6f9bf15e3d76b5ae53a5be130f 100644 (file)
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
             formatTime, formatTimeSpan, createTimeLabel, insertSorted,
-            makeCloseButton, ensureActorVisibleInScrollView */
+            makeCloseButton, ensureActorVisibleInScrollView, wiggle */
 
 const { Clutter, Gio, GLib, GObject, Shell, St } = imports.gi;
 const Gettext = imports.gettext;
@@ -429,3 +429,37 @@ function ensureActorVisibleInScrollView(scrollView, actor) {
         duration: SCROLL_TIME
     });
 }
+
+function wiggle(actor, params) {
+    params = Params.parse(params, {
+        offset: 0,
+        duration: 0,
+        wiggleCount: 0,
+    });
+    actor.translation_x = 0;
+
+    // Accelerate before wiggling
+    actor.ease({
+        translation_x: -params.offset,
+        duration: params.duration,
+        mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+        onComplete: () => {
+            // Wiggle
+            actor.ease({
+                translation_x: params.offset,
+                duration: params.duration,
+                mode: Clutter.AnimationMode.LINEAR,
+                repeatCount: params.wiggleCount,
+                autoReverse: true,
+                onComplete: () => {
+                    // Decelerate and return to the original position
+                    actor.ease({
+                        translation_x: 0,
+                        duration: params.duration,
+                        mode: Clutter.AnimationMode.EASE_IN_QUAD,
+                    });
+                }
+            });
+        }
+    });
+}